package gdut.edu.demo02;

/**
 * @Description 单链表
 * @Author JiaFu
 * @Date 2022/7/6 17:00
 */
public class MyNode {
    //    数据
    private int data;
    //    下一个节点
    private MyNode next;

    public MyNode(int data) {
        this.data = data;
    }

    //    追加节点
    public MyNode append(MyNode myNode) {
//        让指针指向当前节点
        MyNode currentNode = this;
//        循环遍历当前节点是否还有下一个节点
        while (true) {
//        如果还有下一个节点让指针指向下一个节点
            if (currentNode.next != null) {
                currentNode = currentNode.next;
//        如果没有下一个节点则停止循环
            } else {
                break;
            }
        }
//        将myNode追加到最后
        currentNode.next = myNode;
        return this;
    }
//    展示所有节点信息
    public void show(){
//        获得当前节点
        MyNode currentNode = this;
        while (true){
//            打印当前节点信息
            System.out.print(currentNode.getData());
//            取得当前节点的下一个节点
            currentNode = currentNode.next;
//            如果下一个节点为null，表示已到结尾
            if (currentNode == null){
                break;
            }
        }
        System.out.println();
    }

//    删除下一个节点
    public void removeNext(){
//        判断是否还有下一个节点
        if (this.next == null) {
            return;
        }
//        取到当前节点的下下个节点
        MyNode newNext = this.next.next;
//        让当前节点的next指向下下个节点，就把当前节点的下一个节点删除了
        this.next = newNext;
    }
    //    获取节点的数据
    public int getData() {
        return this.data;
    }

//    插入一个节点作为当前节点的下一个节点
    public void insert(MyNode myNode){
//        取出当前节点的下一个节点,作为下下个节点
        MyNode nextNext = this.next;
//        把下下个节点设置为新节点myNode的下一个节点
        myNode.next = nextNext;
//        把新节点myNode设置为当前节点的下一个节点
        this.next = myNode;
//        写法2
/*        myNode.next = this.next;
        this.next = myNode;*/
    }

    //    判断节点是否是最后一个节点
    public boolean isLast() {
        return this.next == null;
    }

    //    获取下一个节点
    public MyNode next() {
        return this.next;
    }

}
